草庐IT

Java BufferedWriter,OutputStreamWriter 能够写入关闭的 FileOutputStream

全部标签

c# - 当应用程序关闭时,我可以检测到后台线程何时被应用程序杀死吗?

我在C#中使用一个线程,我已将IsBackground属性设置为true。线程在循环中运行一些代码,直到应用程序关闭。当应用程序关闭时,线程也停止执行(因为我设置了IsBackground=true)。应用程序如何终止线程?它似乎不是通过调用中止来完成的,因为我没有得到ThreadAbortException。它发生在幕后吗?我想在循环的finallyblock中做一些回滚。我知道我可以自己在线程上调用abort,但我想知道应用程序如何关闭我的后台线程,以及我是否可以从线程内部对此使用react。我知道我可以订阅Application.ApplicationExit事件,但我在服务和w

c# - 我可以避免存储 MS Exchange 凭据,同时仍然能够进行身份验证(针对 EWS)吗?

我正在构建一个应用程序,用于在用户的ExchangeServer帐户(支持2007-2013版本)和应用程序之间同步数据。应用程序不能使用模拟(至少在典型情况下不能),因为用户可以在任意数量的域和交换服务器上。我知道一开始我将不得不询问他们的用户名/电子邮件地址和密码。但是,如果不需要的话,我真的不想负责存储这些凭据(即使它们是加密的,我也不愿意)。我不确定要问什么问题,所以我要回答这些问题:ExchangeServer如何进行身份验证?用户的凭据是按原样直接发送到服务器,还是在通过网络发送之前一起散列?如果对它们进行哈希处理,我如何获取/生成此哈希值以在后续身份验证中重复使用?Exc

c# - 如何关闭 resharper 中的 "Convert Extension Method to Plain Static"自动重构?

在使用Resharper时,由于某些原因,当我调用扩展方法时,它会自动将其转换为静态方法调用。这就是所谓的ConvertExtensionMethodtoPlainStatic重构。foo.Bar()成为MyStaticExtensions.Bar(foo);具有讽刺意味的是,它随后将此标记为代码异味。我该如何关闭它? 最佳答案 Resharper的IntelliSense中嵌入了此功能。我经常使用Linq-to-sql扩展,所以我禁用了这个功能:Resharper-选项-IntelliSense-启用RadiobuttonVisu

c# - 如何防止 .NET 库在关闭时发送 RST 数据包

我正在做一些测试,试图隔离库(.NET)中的一些奇怪行为。当我通过C++使用WinsockAPI并简单地调用closesocket()时,我看到Windows端发送FIN/ACK数据包,而远程端发回ACK数据包。这就是我所说的优雅结束。但是,在使用C#进行编程时,我没有看到所谓的优雅关闭。在C#中,我打开我的套接字,然后在关闭它时,我看到Windows在第一次调用Socket.Shutdown()时仅发送一个FIN数据包。但是,无论如何,当我在C#中调用Socket.Close()时,都会发送一个RST数据包并且连接会立即断开。这让我感到困惑,因为根据我在网上阅读的内容,TCP关闭过程

c# - 将关闭按钮(红色 x)添加到 .NET 工具提示

我正在寻找一种向.NETToolTip对象添加关闭按钮的方法,类似于NotifyIcon所具有的按钮。我将工具提示用作使用Show()方法以编程方式调用的消息气球。这工作正常,但没有onclick事件或关闭工具提示的简单方法。您必须在代码中的其他地方调用Hide()方法,我希望工具提示能够自行关闭。我知道网上有几个气球工具提示使用托管和非托管代码通过WindowsAPI执行此操作,但我宁愿呆在舒适的.NET世界中。我有一个调用我的.NET应用程序的第三方应用程序,它在尝试显示非托管工具提示时崩溃。 最佳答案 您可以尝试通过覆盖现有工

c# - 在 C# 中检查硬盘是否为 SSD 而不在硬盘上写入任何文件的最简单方法是什么?

如果硬盘是SSD(固态硬盘),我需要在C#中检查,没有寻道惩罚?我用过:ManagementClassdriveClass=newManagementClass("Win32_DiskDrive");ManagementObjectCollectiondrives=driveClass.GetInstances();但它只提供属性中包含SSD的字符串,我不能依赖它吗?我需要一种直接的方式来检查吗? 最佳答案 WMI将无法轻松确定这一点。这里有一个解决方案基于Windows7用于确定磁盘是否为SSD的相同算法(更多关于算法的信息:Wi

c# - 如何在传输过程中关闭请求流时获取 HTTP 响应

TL;DR版本当写入请求流时发生传输错误,我无法访问响应,即使服务器发送了它也是如此。完整版我有一个使用HttpWebRequest将文件上传到Tomcat服务器的.NET应用程序。在某些情况下,服务器会提前关闭请求流(因为它出于某种原因拒绝该文件,例如无效的文件名),并发送带有自定义header的400响应以指示错误原因。问题是如果上传的文件很大,请求流在我写完请求体之前关闭,我得到一个IOException:Message:Unabletowritedatatothetransportconnection:Anexistingconnectionwasforciblyclosedb

c# - 使用 Task.Run() 写入控制台失败

我的一位同事发现我们的代码存在问题,花了一段时间才查明到底发生了什么,但这个简单的例子可以最好地证明这一点://FailsclassProgram{staticvoidMain(string[]args){Task.Run(()=>Console.WriteLine("HelloWorld"));Console.ReadKey();}}//WorksfineclassProgram{staticvoidMain(string[]args){Console.Write(String.Empty);Task.Run(()=>Console.WriteLine("HelloWorld"));

c# - 如何在不关闭流的情况下取消 NetworkStream.ReadAsync

我正在尝试使用NetworkStream.ReadAsync()来读取数据,但我找不到如何在调用后取消ReadAsync()。对于背景,NetworkStream由连接的BluetoothClient对象(来自32Feet.NET蓝牙库)提供给我。我正在尝试的当前get-it-working代码如下。intbytesRead;while(this.continueReading){bytesRead=awaitthis.stream.ReadAsync(this.buffer,0,(int)this.buffer.Length);Console.WriteLine("Received{

c# - 如何用多个线程写入单个文件?

我正在用C#创建Windows应用程序,我想在其中写入具有多个线程的多个文件。我从不同的端口获取数据,每个端口都有一个文件。是否有可能为每个端口创建线程并一次又一次地使用相同的线程将数据写入相应的文件?假设我从端口10000、10001、10002获取数据,并且有三个文件10000.txt、10001.txt和10002.txt。我必须创建三个线程分别将数据写入这三个文件,我想一次又一次地使用这些线程。可能吗?如果可能的话,您能提供一小部分代码示例吗? 最佳答案 如评论中所述,这是自找麻烦。所以,你需要有一个线程安全的编写器类:pu